# # hello.ws-blink.C3.py # Seeed XIAO ESP32C3 WebSocket button-blink hello-world # # Neil Gershenfeld 11/24/23 # # This work may be reproduced, modified, distributed, # performed, and displayed for any purpose, but must # acknowledge this project. Copyright is retained and # must be preserved. The work is provided as is; no # warranty is provided, and users accept all liability. # # load MicroPython # https://micropython.org/download/ESP32_GENERIC_C3/ # esptool.py --chip esp32c3 --port /dev/ttyACM0 erase_flash # esptool.py --chip esp32c3 --port /dev/ttyACM0 --baud 460800 write_flash -z 0x0 ESP32_GENERIC_C3-20231005-v1.21.0.bin # save Microdot: # https://github.com/miguelgrinberg/microdot/blob/main/src/microdot.py # https://github.com/miguelgrinberg/microdot/blob/main/src/microdot_asyncio.py # https://github.com/miguelgrinberg/microdot/blob/main/src/microdot_websocket.py # https://github.com/miguelgrinberg/microdot/blob/main/src/microdot_asyncio_websocket.py # # imports # import network from machine import Pin import uasyncio as asyncio from microdot_asyncio import Microdot from microdot_asyncio_websocket import with_websocket # # set up LED and button # led_pin = 21 #button_pin = 21 led = Pin(led_pin,Pin.OUT) #button = Pin(button_pin,Pin.IN,Pin.PULL_UP) #button_up = True # # connect to WiFi access point # # wifi = network.WLAN(network.STA_IF) print("heree1") wifi = network.WLAN(network.AP_IF) wifi.config(essid="zach",password="1234") wifi.active(True) while (wifi.active() == False): print("failed1") pass # wifi.connect("ssid","key") #while (wifi.isconnected() == False): # print("failed") #pass print("connected to AP at ",wifi.ifconfig()) # # create WebSocket server # server = Microdot() # # server route # socket = [] @server.route('/') @with_websocket async def message(request,ws): global socket socket = ws while True: data = await ws.receive() if (data == 'on'): led.value(1) # await ws.send("LED on amira") await ws.send("2,4,5") elif (data == 'off'): led.value(0) await ws.send("LED off") # # local task # async def local(): global button_up,socket while True: # if ((button.value() == 0) and button_up): # led.value(1) # await socket.send('button down') # button_up = False # elif ((button.value() == 1) and (not button_up)): # led.value(0) # await socket.send('button up') # button_up = True await asyncio.sleep(0) # # main tasks # async def main(): print("heree") local_task = asyncio.create_task(local()) server_task = asyncio.create_task(server.start_server(port=12345,debug=True)) await asyncio.gather(local_task,server_task) # # run main tasks # asyncio.run(main())